﻿using System;
using System.Collections.Generic;
using System.Text;
using SistemaLib.sipe.db.sqlserver;
using SistemaLib.Entidades;
using SistemaLib.sipe.db.general;
using SistemaLib.sipe.util;
using System.Data;

namespace SistemaLib.Persistencia
{
    public class DbEstimacionTiempo : DbBase
    {
        private void Agregar(EstimacionTiempo et)
        {
            DbScriptGenerator sql = new DbScriptGenerator();

            sql.Tabla = "EstimacionesTiempos";
            sql.addCampo("idTarea");
            sql.addCampo("horasEstimadas");


            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@idTarea", DbTipo.Entero, 0, et.IdTarea));
            col.Add(DbConnection.SqlInputParam("@horasEstimadas", DbTipo.Float, 0, et.HorasEstimadas));


            object id;
            this.DbConnection.RunScalarProcedure(sql.getInsert(), col, CommandType.Text, out id);

            et.Id = int.Parse(id.ToString());
        }

        private void Modificar(EstimacionTiempo et)
        {
            DbScriptGenerator sql = new DbScriptGenerator();
            
            sql.Tabla = "EstimacionesTiempos";
            sql.CampoClave = "id";
            sql.addCampo("idTarea");
            sql.addCampo("horasEstimadas");

            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@id", DbTipo.Entero, 0, et.Id));
            col.Add(DbConnection.SqlInputParam("@idTarea", DbTipo.Entero, 0, et.IdTarea));
            col.Add(DbConnection.SqlInputParam("@horasEstimadas", DbTipo.Float, 0, et.HorasEstimadas));


            object id;
            this.DbConnection.RunScalarProcedure(sql.getUpdate(), col, CommandType.Text, out id);
        }

        internal void Eliminar(int idET)
        {
            string sql = "delete from EstimacionesTiempos where id = @id";

            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@id", DbTipo.Entero, 0, idET));

            int cant;
            this.DbConnection.RunNonQueryProcedure(sql, col, CommandType.Text, out cant);
        }

        internal void Guardar(EstimacionTiempo et)
        {
            if (et.Id == 0)
                Agregar(et);
            else
                Modificar(et);
        }

        private void Cargar(DataRow fila, EstimacionTiempo obj)
        {
            obj.Id = ObtieneCampo.TipoInt(fila, "id");
            obj.IdTarea = ObtieneCampo.TipoInt(fila, "idTarea");
            obj.HorasEstimadas = ObtieneCampo.TipoMoneda(fila, "horasEstimadas");
        }

        public EstimacionTiempo CargarEstimacionTiempo(int idTarea)
        {
            EstimacionTiempo obj = new EstimacionTiempo();

            string sql = @"select * from EstimacionesTiempos where idTarea = @idTarea";

            DataSet ds;

            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@idTarea", DbTipo.Entero, 0, idTarea));

            this.DbConnection.RunDataSetProcedure(sql, col, CommandType.Text, out ds);

            if (ds != null && ds.Tables[0].Rows.Count > 0)
            {
                DataRow fila = ds.Tables[0].Rows[0];
                Cargar(fila, obj);
            }

            return obj;
        }
    }
}
